circuit ShiftAddMul :
  module ShiftAddMul :
    input clock : Clock
    input reset : UInt<1>
    output in : { flip load : UInt<1>, flip A : UInt<8>, flip B : UInt<8>}
    output out : { P : UInt<16>, M : UInt<16>, c : UInt<8>}

    wire _move_WIRE : UInt<1>[16] @[ShiftAddMul.scala 25:29]
    _move_WIRE[0] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[1] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[2] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[3] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[4] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[5] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[6] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[7] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[8] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[9] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[10] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[11] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[12] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[13] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[14] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    _move_WIRE[15] <= UInt<1>("h0") @[ShiftAddMul.scala 25:29]
    reg move : UInt<1>[16], clock with :
      reset => (UInt<1>("h0"), move) @[ShiftAddMul.scala 25:21]
    move[0] <= _move_WIRE[0] @[ShiftAddMul.scala 25:21]
    move[1] <= _move_WIRE[1] @[ShiftAddMul.scala 25:21]
    move[2] <= _move_WIRE[2] @[ShiftAddMul.scala 25:21]
    move[3] <= _move_WIRE[3] @[ShiftAddMul.scala 25:21]
    move[4] <= _move_WIRE[4] @[ShiftAddMul.scala 25:21]
    move[5] <= _move_WIRE[5] @[ShiftAddMul.scala 25:21]
    move[6] <= _move_WIRE[6] @[ShiftAddMul.scala 25:21]
    move[7] <= _move_WIRE[7] @[ShiftAddMul.scala 25:21]
    move[8] <= _move_WIRE[8] @[ShiftAddMul.scala 25:21]
    move[9] <= _move_WIRE[9] @[ShiftAddMul.scala 25:21]
    move[10] <= _move_WIRE[10] @[ShiftAddMul.scala 25:21]
    move[11] <= _move_WIRE[11] @[ShiftAddMul.scala 25:21]
    move[12] <= _move_WIRE[12] @[ShiftAddMul.scala 25:21]
    move[13] <= _move_WIRE[13] @[ShiftAddMul.scala 25:21]
    move[14] <= _move_WIRE[14] @[ShiftAddMul.scala 25:21]
    move[15] <= _move_WIRE[15] @[ShiftAddMul.scala 25:21]
    wire _prod_WIRE : UInt<1>[16] @[ShiftAddMul.scala 26:29]
    _prod_WIRE[0] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[1] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[2] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[3] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[4] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[5] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[6] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[7] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[8] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[9] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[10] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[11] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[12] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[13] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[14] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    _prod_WIRE[15] <= UInt<1>("h0") @[ShiftAddMul.scala 26:29]
    reg prod : UInt<1>[16], clock with :
      reset => (UInt<1>("h0"), prod) @[ShiftAddMul.scala 26:21]
    prod[0] <= _prod_WIRE[0] @[ShiftAddMul.scala 26:21]
    prod[1] <= _prod_WIRE[1] @[ShiftAddMul.scala 26:21]
    prod[2] <= _prod_WIRE[2] @[ShiftAddMul.scala 26:21]
    prod[3] <= _prod_WIRE[3] @[ShiftAddMul.scala 26:21]
    prod[4] <= _prod_WIRE[4] @[ShiftAddMul.scala 26:21]
    prod[5] <= _prod_WIRE[5] @[ShiftAddMul.scala 26:21]
    prod[6] <= _prod_WIRE[6] @[ShiftAddMul.scala 26:21]
    prod[7] <= _prod_WIRE[7] @[ShiftAddMul.scala 26:21]
    prod[8] <= _prod_WIRE[8] @[ShiftAddMul.scala 26:21]
    prod[9] <= _prod_WIRE[9] @[ShiftAddMul.scala 26:21]
    prod[10] <= _prod_WIRE[10] @[ShiftAddMul.scala 26:21]
    prod[11] <= _prod_WIRE[11] @[ShiftAddMul.scala 26:21]
    prod[12] <= _prod_WIRE[12] @[ShiftAddMul.scala 26:21]
    prod[13] <= _prod_WIRE[13] @[ShiftAddMul.scala 26:21]
    prod[14] <= _prod_WIRE[14] @[ShiftAddMul.scala 26:21]
    prod[15] <= _prod_WIRE[15] @[ShiftAddMul.scala 26:21]
    wire carry : UInt<1>[17] @[ShiftAddMul.scala 28:19]
    reg count : UInt, clock with :
      reset => (UInt<1>("h0"), count) @[ShiftAddMul.scala 29:22]
    count <= UInt<8>("h0") @[ShiftAddMul.scala 29:22]
    carry[0] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[1] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[2] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[3] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[4] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[5] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[6] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[7] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[8] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[9] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[10] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[11] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[12] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[13] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[14] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[15] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    carry[16] <= UInt<1>("h0") @[ShiftAddMul.scala 32:14]
    when in.load : @[ShiftAddMul.scala 35:17]
      node _move_0_T = bits(in.B, 0, 0) @[ShiftAddMul.scala 37:22]
      move[0] <= _move_0_T @[ShiftAddMul.scala 37:15]
      node _move_1_T = bits(in.B, 1, 1) @[ShiftAddMul.scala 37:22]
      move[1] <= _move_1_T @[ShiftAddMul.scala 37:15]
      node _move_2_T = bits(in.B, 2, 2) @[ShiftAddMul.scala 37:22]
      move[2] <= _move_2_T @[ShiftAddMul.scala 37:15]
      node _move_3_T = bits(in.B, 3, 3) @[ShiftAddMul.scala 37:22]
      move[3] <= _move_3_T @[ShiftAddMul.scala 37:15]
      node _move_4_T = bits(in.B, 4, 4) @[ShiftAddMul.scala 37:22]
      move[4] <= _move_4_T @[ShiftAddMul.scala 37:15]
      node _move_5_T = bits(in.B, 5, 5) @[ShiftAddMul.scala 37:22]
      move[5] <= _move_5_T @[ShiftAddMul.scala 37:15]
      node _move_6_T = bits(in.B, 6, 6) @[ShiftAddMul.scala 37:22]
      move[6] <= _move_6_T @[ShiftAddMul.scala 37:15]
      node _move_7_T = bits(in.B, 7, 7) @[ShiftAddMul.scala 37:22]
      move[7] <= _move_7_T @[ShiftAddMul.scala 37:15]
    else :
      node _T = lt(count, UInt<5>("h10")) @[ShiftAddMul.scala 39:20]
      when _T : @[ShiftAddMul.scala 39:35]
        node _T_1 = dshr(in.A, count) @[ShiftAddMul.scala 41:14]
        node _T_2 = bits(_T_1, 0, 0) @[ShiftAddMul.scala 41:14]
        node _T_3 = bits(_T_2, 0, 0) @[ShiftAddMul.scala 41:22]
        when _T_3 : @[ShiftAddMul.scala 41:30]
          node _prod_0_T = xor(prod[0], move[0]) @[ShiftAddMul.scala 47:16]
          node _prod_0_T_1 = xor(_prod_0_T, carry[0]) @[ShiftAddMul.scala 47:20]
          prod[0] <= _prod_0_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_1_T = and(prod[0], move[0]) @[ShiftAddMul.scala 48:18]
          node _carry_1_T_1 = and(move[0], carry[0]) @[ShiftAddMul.scala 48:28]
          node _carry_1_T_2 = or(_carry_1_T, _carry_1_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_1_T_3 = and(carry[0], prod[0]) @[ShiftAddMul.scala 48:38]
          node _carry_1_T_4 = or(_carry_1_T_2, _carry_1_T_3) @[ShiftAddMul.scala 48:33]
          carry[1] <= _carry_1_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_1_T = xor(prod[1], move[1]) @[ShiftAddMul.scala 47:16]
          node _prod_1_T_1 = xor(_prod_1_T, carry[1]) @[ShiftAddMul.scala 47:20]
          prod[1] <= _prod_1_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_2_T = and(prod[1], move[1]) @[ShiftAddMul.scala 48:18]
          node _carry_2_T_1 = and(move[1], carry[1]) @[ShiftAddMul.scala 48:28]
          node _carry_2_T_2 = or(_carry_2_T, _carry_2_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_2_T_3 = and(carry[1], prod[1]) @[ShiftAddMul.scala 48:38]
          node _carry_2_T_4 = or(_carry_2_T_2, _carry_2_T_3) @[ShiftAddMul.scala 48:33]
          carry[2] <= _carry_2_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_2_T = xor(prod[2], move[2]) @[ShiftAddMul.scala 47:16]
          node _prod_2_T_1 = xor(_prod_2_T, carry[2]) @[ShiftAddMul.scala 47:20]
          prod[2] <= _prod_2_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_3_T = and(prod[2], move[2]) @[ShiftAddMul.scala 48:18]
          node _carry_3_T_1 = and(move[2], carry[2]) @[ShiftAddMul.scala 48:28]
          node _carry_3_T_2 = or(_carry_3_T, _carry_3_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_3_T_3 = and(carry[2], prod[2]) @[ShiftAddMul.scala 48:38]
          node _carry_3_T_4 = or(_carry_3_T_2, _carry_3_T_3) @[ShiftAddMul.scala 48:33]
          carry[3] <= _carry_3_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_3_T = xor(prod[3], move[3]) @[ShiftAddMul.scala 47:16]
          node _prod_3_T_1 = xor(_prod_3_T, carry[3]) @[ShiftAddMul.scala 47:20]
          prod[3] <= _prod_3_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_4_T = and(prod[3], move[3]) @[ShiftAddMul.scala 48:18]
          node _carry_4_T_1 = and(move[3], carry[3]) @[ShiftAddMul.scala 48:28]
          node _carry_4_T_2 = or(_carry_4_T, _carry_4_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_4_T_3 = and(carry[3], prod[3]) @[ShiftAddMul.scala 48:38]
          node _carry_4_T_4 = or(_carry_4_T_2, _carry_4_T_3) @[ShiftAddMul.scala 48:33]
          carry[4] <= _carry_4_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_4_T = xor(prod[4], move[4]) @[ShiftAddMul.scala 47:16]
          node _prod_4_T_1 = xor(_prod_4_T, carry[4]) @[ShiftAddMul.scala 47:20]
          prod[4] <= _prod_4_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_5_T = and(prod[4], move[4]) @[ShiftAddMul.scala 48:18]
          node _carry_5_T_1 = and(move[4], carry[4]) @[ShiftAddMul.scala 48:28]
          node _carry_5_T_2 = or(_carry_5_T, _carry_5_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_5_T_3 = and(carry[4], prod[4]) @[ShiftAddMul.scala 48:38]
          node _carry_5_T_4 = or(_carry_5_T_2, _carry_5_T_3) @[ShiftAddMul.scala 48:33]
          carry[5] <= _carry_5_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_5_T = xor(prod[5], move[5]) @[ShiftAddMul.scala 47:16]
          node _prod_5_T_1 = xor(_prod_5_T, carry[5]) @[ShiftAddMul.scala 47:20]
          prod[5] <= _prod_5_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_6_T = and(prod[5], move[5]) @[ShiftAddMul.scala 48:18]
          node _carry_6_T_1 = and(move[5], carry[5]) @[ShiftAddMul.scala 48:28]
          node _carry_6_T_2 = or(_carry_6_T, _carry_6_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_6_T_3 = and(carry[5], prod[5]) @[ShiftAddMul.scala 48:38]
          node _carry_6_T_4 = or(_carry_6_T_2, _carry_6_T_3) @[ShiftAddMul.scala 48:33]
          carry[6] <= _carry_6_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_6_T = xor(prod[6], move[6]) @[ShiftAddMul.scala 47:16]
          node _prod_6_T_1 = xor(_prod_6_T, carry[6]) @[ShiftAddMul.scala 47:20]
          prod[6] <= _prod_6_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_7_T = and(prod[6], move[6]) @[ShiftAddMul.scala 48:18]
          node _carry_7_T_1 = and(move[6], carry[6]) @[ShiftAddMul.scala 48:28]
          node _carry_7_T_2 = or(_carry_7_T, _carry_7_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_7_T_3 = and(carry[6], prod[6]) @[ShiftAddMul.scala 48:38]
          node _carry_7_T_4 = or(_carry_7_T_2, _carry_7_T_3) @[ShiftAddMul.scala 48:33]
          carry[7] <= _carry_7_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_7_T = xor(prod[7], move[7]) @[ShiftAddMul.scala 47:16]
          node _prod_7_T_1 = xor(_prod_7_T, carry[7]) @[ShiftAddMul.scala 47:20]
          prod[7] <= _prod_7_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_8_T = and(prod[7], move[7]) @[ShiftAddMul.scala 48:18]
          node _carry_8_T_1 = and(move[7], carry[7]) @[ShiftAddMul.scala 48:28]
          node _carry_8_T_2 = or(_carry_8_T, _carry_8_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_8_T_3 = and(carry[7], prod[7]) @[ShiftAddMul.scala 48:38]
          node _carry_8_T_4 = or(_carry_8_T_2, _carry_8_T_3) @[ShiftAddMul.scala 48:33]
          carry[8] <= _carry_8_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_8_T = xor(prod[8], move[8]) @[ShiftAddMul.scala 47:16]
          node _prod_8_T_1 = xor(_prod_8_T, carry[8]) @[ShiftAddMul.scala 47:20]
          prod[8] <= _prod_8_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_9_T = and(prod[8], move[8]) @[ShiftAddMul.scala 48:18]
          node _carry_9_T_1 = and(move[8], carry[8]) @[ShiftAddMul.scala 48:28]
          node _carry_9_T_2 = or(_carry_9_T, _carry_9_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_9_T_3 = and(carry[8], prod[8]) @[ShiftAddMul.scala 48:38]
          node _carry_9_T_4 = or(_carry_9_T_2, _carry_9_T_3) @[ShiftAddMul.scala 48:33]
          carry[9] <= _carry_9_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_9_T = xor(prod[9], move[9]) @[ShiftAddMul.scala 47:16]
          node _prod_9_T_1 = xor(_prod_9_T, carry[9]) @[ShiftAddMul.scala 47:20]
          prod[9] <= _prod_9_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_10_T = and(prod[9], move[9]) @[ShiftAddMul.scala 48:18]
          node _carry_10_T_1 = and(move[9], carry[9]) @[ShiftAddMul.scala 48:28]
          node _carry_10_T_2 = or(_carry_10_T, _carry_10_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_10_T_3 = and(carry[9], prod[9]) @[ShiftAddMul.scala 48:38]
          node _carry_10_T_4 = or(_carry_10_T_2, _carry_10_T_3) @[ShiftAddMul.scala 48:33]
          carry[10] <= _carry_10_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_10_T = xor(prod[10], move[10]) @[ShiftAddMul.scala 47:16]
          node _prod_10_T_1 = xor(_prod_10_T, carry[10]) @[ShiftAddMul.scala 47:20]
          prod[10] <= _prod_10_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_11_T = and(prod[10], move[10]) @[ShiftAddMul.scala 48:18]
          node _carry_11_T_1 = and(move[10], carry[10]) @[ShiftAddMul.scala 48:28]
          node _carry_11_T_2 = or(_carry_11_T, _carry_11_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_11_T_3 = and(carry[10], prod[10]) @[ShiftAddMul.scala 48:38]
          node _carry_11_T_4 = or(_carry_11_T_2, _carry_11_T_3) @[ShiftAddMul.scala 48:33]
          carry[11] <= _carry_11_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_11_T = xor(prod[11], move[11]) @[ShiftAddMul.scala 47:16]
          node _prod_11_T_1 = xor(_prod_11_T, carry[11]) @[ShiftAddMul.scala 47:20]
          prod[11] <= _prod_11_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_12_T = and(prod[11], move[11]) @[ShiftAddMul.scala 48:18]
          node _carry_12_T_1 = and(move[11], carry[11]) @[ShiftAddMul.scala 48:28]
          node _carry_12_T_2 = or(_carry_12_T, _carry_12_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_12_T_3 = and(carry[11], prod[11]) @[ShiftAddMul.scala 48:38]
          node _carry_12_T_4 = or(_carry_12_T_2, _carry_12_T_3) @[ShiftAddMul.scala 48:33]
          carry[12] <= _carry_12_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_12_T = xor(prod[12], move[12]) @[ShiftAddMul.scala 47:16]
          node _prod_12_T_1 = xor(_prod_12_T, carry[12]) @[ShiftAddMul.scala 47:20]
          prod[12] <= _prod_12_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_13_T = and(prod[12], move[12]) @[ShiftAddMul.scala 48:18]
          node _carry_13_T_1 = and(move[12], carry[12]) @[ShiftAddMul.scala 48:28]
          node _carry_13_T_2 = or(_carry_13_T, _carry_13_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_13_T_3 = and(carry[12], prod[12]) @[ShiftAddMul.scala 48:38]
          node _carry_13_T_4 = or(_carry_13_T_2, _carry_13_T_3) @[ShiftAddMul.scala 48:33]
          carry[13] <= _carry_13_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_13_T = xor(prod[13], move[13]) @[ShiftAddMul.scala 47:16]
          node _prod_13_T_1 = xor(_prod_13_T, carry[13]) @[ShiftAddMul.scala 47:20]
          prod[13] <= _prod_13_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_14_T = and(prod[13], move[13]) @[ShiftAddMul.scala 48:18]
          node _carry_14_T_1 = and(move[13], carry[13]) @[ShiftAddMul.scala 48:28]
          node _carry_14_T_2 = or(_carry_14_T, _carry_14_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_14_T_3 = and(carry[13], prod[13]) @[ShiftAddMul.scala 48:38]
          node _carry_14_T_4 = or(_carry_14_T_2, _carry_14_T_3) @[ShiftAddMul.scala 48:33]
          carry[14] <= _carry_14_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_14_T = xor(prod[14], move[14]) @[ShiftAddMul.scala 47:16]
          node _prod_14_T_1 = xor(_prod_14_T, carry[14]) @[ShiftAddMul.scala 47:20]
          prod[14] <= _prod_14_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_15_T = and(prod[14], move[14]) @[ShiftAddMul.scala 48:18]
          node _carry_15_T_1 = and(move[14], carry[14]) @[ShiftAddMul.scala 48:28]
          node _carry_15_T_2 = or(_carry_15_T, _carry_15_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_15_T_3 = and(carry[14], prod[14]) @[ShiftAddMul.scala 48:38]
          node _carry_15_T_4 = or(_carry_15_T_2, _carry_15_T_3) @[ShiftAddMul.scala 48:33]
          carry[15] <= _carry_15_T_4 @[ShiftAddMul.scala 48:12]
          node _prod_15_T = xor(prod[15], move[15]) @[ShiftAddMul.scala 47:16]
          node _prod_15_T_1 = xor(_prod_15_T, carry[15]) @[ShiftAddMul.scala 47:20]
          prod[15] <= _prod_15_T_1 @[ShiftAddMul.scala 47:11]
          node _carry_16_T = and(prod[15], move[15]) @[ShiftAddMul.scala 48:18]
          node _carry_16_T_1 = and(move[15], carry[15]) @[ShiftAddMul.scala 48:28]
          node _carry_16_T_2 = or(_carry_16_T, _carry_16_T_1) @[ShiftAddMul.scala 48:23]
          node _carry_16_T_3 = and(carry[15], prod[15]) @[ShiftAddMul.scala 48:38]
          node _carry_16_T_4 = or(_carry_16_T_2, _carry_16_T_3) @[ShiftAddMul.scala 48:33]
          carry[16] <= _carry_16_T_4 @[ShiftAddMul.scala 48:12]
        else :
          prod[0] <= prod[0] @[ShiftAddMul.scala 51:12]
          prod[1] <= prod[1] @[ShiftAddMul.scala 51:12]
          prod[2] <= prod[2] @[ShiftAddMul.scala 51:12]
          prod[3] <= prod[3] @[ShiftAddMul.scala 51:12]
          prod[4] <= prod[4] @[ShiftAddMul.scala 51:12]
          prod[5] <= prod[5] @[ShiftAddMul.scala 51:12]
          prod[6] <= prod[6] @[ShiftAddMul.scala 51:12]
          prod[7] <= prod[7] @[ShiftAddMul.scala 51:12]
          prod[8] <= prod[8] @[ShiftAddMul.scala 51:12]
          prod[9] <= prod[9] @[ShiftAddMul.scala 51:12]
          prod[10] <= prod[10] @[ShiftAddMul.scala 51:12]
          prod[11] <= prod[11] @[ShiftAddMul.scala 51:12]
          prod[12] <= prod[12] @[ShiftAddMul.scala 51:12]
          prod[13] <= prod[13] @[ShiftAddMul.scala 51:12]
          prod[14] <= prod[14] @[ShiftAddMul.scala 51:12]
          prod[15] <= prod[15] @[ShiftAddMul.scala 51:12]
        move[1] <= move[0] @[ShiftAddMul.scala 56:17]
        move[2] <= move[1] @[ShiftAddMul.scala 56:17]
        move[3] <= move[2] @[ShiftAddMul.scala 56:17]
        move[4] <= move[3] @[ShiftAddMul.scala 56:17]
        move[5] <= move[4] @[ShiftAddMul.scala 56:17]
        move[6] <= move[5] @[ShiftAddMul.scala 56:17]
        move[7] <= move[6] @[ShiftAddMul.scala 56:17]
        move[8] <= move[7] @[ShiftAddMul.scala 56:17]
        move[9] <= move[8] @[ShiftAddMul.scala 56:17]
        move[10] <= move[9] @[ShiftAddMul.scala 56:17]
        move[11] <= move[10] @[ShiftAddMul.scala 56:17]
        move[12] <= move[11] @[ShiftAddMul.scala 56:17]
        move[13] <= move[12] @[ShiftAddMul.scala 56:17]
        move[14] <= move[13] @[ShiftAddMul.scala 56:17]
        move[15] <= move[14] @[ShiftAddMul.scala 56:17]
        node _count_T = add(count, UInt<1>("h1")) @[ShiftAddMul.scala 59:20]
        node _count_T_1 = tail(_count_T, 1) @[ShiftAddMul.scala 59:20]
        count <= _count_T_1 @[ShiftAddMul.scala 59:11]
    node out_M_lo_lo_lo = cat(move[1], move[0]) @[ShiftAddMul.scala 62:17]
    node out_M_lo_lo_hi = cat(move[3], move[2]) @[ShiftAddMul.scala 62:17]
    node out_M_lo_lo = cat(out_M_lo_lo_hi, out_M_lo_lo_lo) @[ShiftAddMul.scala 62:17]
    node out_M_lo_hi_lo = cat(move[5], move[4]) @[ShiftAddMul.scala 62:17]
    node out_M_lo_hi_hi = cat(move[7], move[6]) @[ShiftAddMul.scala 62:17]
    node out_M_lo_hi = cat(out_M_lo_hi_hi, out_M_lo_hi_lo) @[ShiftAddMul.scala 62:17]
    node out_M_lo = cat(out_M_lo_hi, out_M_lo_lo) @[ShiftAddMul.scala 62:17]
    node out_M_hi_lo_lo = cat(move[9], move[8]) @[ShiftAddMul.scala 62:17]
    node out_M_hi_lo_hi = cat(move[11], move[10]) @[ShiftAddMul.scala 62:17]
    node out_M_hi_lo = cat(out_M_hi_lo_hi, out_M_hi_lo_lo) @[ShiftAddMul.scala 62:17]
    node out_M_hi_hi_lo = cat(move[13], move[12]) @[ShiftAddMul.scala 62:17]
    node out_M_hi_hi_hi = cat(move[15], move[14]) @[ShiftAddMul.scala 62:17]
    node out_M_hi_hi = cat(out_M_hi_hi_hi, out_M_hi_hi_lo) @[ShiftAddMul.scala 62:17]
    node out_M_hi = cat(out_M_hi_hi, out_M_hi_lo) @[ShiftAddMul.scala 62:17]
    node _out_M_T = cat(out_M_hi, out_M_lo) @[ShiftAddMul.scala 62:17]
    out.M <= _out_M_T @[ShiftAddMul.scala 62:9]
    node out_P_lo_lo_lo = cat(prod[1], prod[0]) @[ShiftAddMul.scala 63:17]
    node out_P_lo_lo_hi = cat(prod[3], prod[2]) @[ShiftAddMul.scala 63:17]
    node out_P_lo_lo = cat(out_P_lo_lo_hi, out_P_lo_lo_lo) @[ShiftAddMul.scala 63:17]
    node out_P_lo_hi_lo = cat(prod[5], prod[4]) @[ShiftAddMul.scala 63:17]
    node out_P_lo_hi_hi = cat(prod[7], prod[6]) @[ShiftAddMul.scala 63:17]
    node out_P_lo_hi = cat(out_P_lo_hi_hi, out_P_lo_hi_lo) @[ShiftAddMul.scala 63:17]
    node out_P_lo = cat(out_P_lo_hi, out_P_lo_lo) @[ShiftAddMul.scala 63:17]
    node out_P_hi_lo_lo = cat(prod[9], prod[8]) @[ShiftAddMul.scala 63:17]
    node out_P_hi_lo_hi = cat(prod[11], prod[10]) @[ShiftAddMul.scala 63:17]
    node out_P_hi_lo = cat(out_P_hi_lo_hi, out_P_hi_lo_lo) @[ShiftAddMul.scala 63:17]
    node out_P_hi_hi_lo = cat(prod[13], prod[12]) @[ShiftAddMul.scala 63:17]
    node out_P_hi_hi_hi = cat(prod[15], prod[14]) @[ShiftAddMul.scala 63:17]
    node out_P_hi_hi = cat(out_P_hi_hi_hi, out_P_hi_hi_lo) @[ShiftAddMul.scala 63:17]
    node out_P_hi = cat(out_P_hi_hi, out_P_hi_lo) @[ShiftAddMul.scala 63:17]
    node _out_P_T = cat(out_P_hi, out_P_lo) @[ShiftAddMul.scala 63:17]
    out.P <= _out_P_T @[ShiftAddMul.scala 63:9]
    out.c <= count @[ShiftAddMul.scala 64:9]

